| Transcription | Andi script | Translation (Rus) | Translation (Eng) |
|---|---|---|---|
| ʁadillˀa=lo | гъадилл*а=ло | ‘в загоне, тоже’ | ‘in a shed, too’ |
| χajrulˀa=ʁojd | хайрул*а=гъойд | ‘на выручке, мол’ | ‘on a revenue, they say’ |
| aχirulˀa | ахирул*а | ‘в конце’ | ‘in the end’ |
| aχranɬo=lojd | ахранлъо=лойд | ‘сторожем’ | ‘as a gatekeeper, PTCL’ |
| alamatol | аламатол | ‘чудеса’ | ‘miracles’ |
| ašolawl | ашолавл | ‘ашалинцы’ | ‘Ashali villagers’ |
| balˀib | бал*иб | ‘ученый’ | ‘educated’ |
| balˀoɬi | бал*олъи | ‘обучил’ | ‘taught (them)’ |
| balˀorallo | бал*оралло | ‘обучает’ | ‘teaches (them)’ |
| belˀora | бел*ора | ‘тонкий’ | ‘thin’ |
| beqoloɢa | бехъологъ*а | ‘пока прибудет’ | ‘until (someone) arrives’ |
| beqoloɢasːi | бехъологъ*асси | ‘пока прибудет’ | ‘until (someone) arrives’ |
| beršo=lˀa | бершол*а | ‘поменялось’ | ‘(it) changed’ |
| bik’o=lˀa | бикIо=л*а | ‘было же’ | ‘(it) was, wasn’t it’ |
| bik’o=sːu=lˀa | бикIо=ссу=л*а | ‘не было же’ | ‘(it) was not, was it’ |
| biloɬol | билолъол | ‘горцы’ | ‘highlanders’ |
| biloč’ukːu | билочIукку | ‘с горы’ | ‘from a mountain’ |
| bilolˀakːu | билол*акку | ‘с гор’ | ‘from the mountains’ |
| bilolˀakːu=χarid | билол*акку=харид | ‘со стороны гор’ | ‘from the direction of the mountains’ |
| bilolˀo=jd | билол*о=йд | ‘в горы, мол’ | ‘into the mountains, they said’ |
| buʁa=lo | бугъа=ло | ‘бычок, тоже’ | ‘young bull, too’ |
| buχːurado=lo | буххурадо=ло | ‘забирают, тоже’ | ‘taking it, too’ |
| bulˀonoq | бул*онохъ | ‘ушло’ | ‘(it) left’ |
| buturulur | бутурулур | ‘чеченцев (род.п.)’ | ‘of the Chechens’ |
| c’alˀa | цIал*а | ‘на огне’ | ‘on fire’ |
| č’alanni=lo | чIаланни=ло | ‘надоело, тоже’ | ‘got fed up, too’ |
| č’itulˀo | чIитул*о | ‘в местность Читу’ | ‘to Chitu (toponym)’ |
| čalu=lo | чалу=ло | ‘фитиль, тоже’ | ‘candle wick, too’ |
| čalu=lojd | чалу=лойд | ‘фитиль’ | ‘candle wick, PTCL’ |
| ček’a=lo | чекIа=ло | ‘нога, тоже’ | ‘leg, too’ |
| čelekʷaq | челеквахъ | ‘в ведра’ | ‘in the buckets’ |
| čelek=lojd | челек=лойд | ‘ведро’ | ‘bucket, PTCL’ |
| čongola | чонгола | ‘в тазике’ | ‘in a wash-basin’ |
| čʷaχːelasːi | чваххеласси | ‘протекающий’ | ‘one that leaks’ |
| darʁilˀa | даргъил*а | ‘в местности Дарго’ | ‘in Dargo (toponym)’ |
| darʁilˀo | даргъил*о | ‘в местность Дарго’ | ‘to Dargo (toponym)’ |
| dilˀo | дил*о | ‘мне’ | ‘to me’ |
| gallˀa=lojd | галл*а=лойд | ‘на шее’ | ‘on shoulder, PTCL’ |
| haǯilawšud | гьаджилавшуд | ‘Гаджилав (эргатив)’ | ‘Gadzhilav (personal name, ergative)’ |
| haq’illˀa=lo | гьакъилл*а=ло | ‘по поводу, тоже’ | ‘and as to …’ |
| haq’iq’atilˀa | гьакъикъатил*а | ‘на самом деле’ | ‘in truth, truly’ |
| haržulˀa | гьаржул*а | ‘на сундуке’ | ‘on a trunk’ |
| hawroχilˀa | гьаврохил*а | ‘на ишаке’ | ‘on a donkey’ |
| heɬeliɬ | гьелъелилъ | ‘их (жен. р. мн. ч.)’ | ‘their (women’s)’ |
| heɬulo | гьелъу=ло | ‘там, тоже’ | ‘there, too’ |
| hebrihilˀa=jd | гьебригьил*а=йд | ‘в это время, мол’ | ‘at that moment, they said’ |
| hegebrihi=lo | гьегебригьи=ло | ‘это время, тоже’ | ‘that moment, too’ |
| hegelˀa | гьегел*а | ‘на этом’ | ‘on this’ |
| hegelid | гьегелид | ‘они (жен. р. мн. ч. эрг.)’ | ‘they (women, ergative)’ |
| hegeluɬu | гьегелулъу | ‘им (муж. р. мн. ч.)’ | ‘to them (men)’ |
| helč’u=lo | гьелчIу=ло | ‘у этого, тоже’ | ‘at him, too’ |
| hilˀa | гьил*а | ‘наверху’ | ‘on top of’ |
| hilˀasːi | гьил*асси | ‘верхний’ | ‘that of the top’ |
| hilˀo | гьил*о | ‘наверх’ | ‘onto the top of’ |
| hilˀolč’i=lo | гьил*олчIи=ло | ‘еще больше’ | ‘even more’ |
| hinc’olˀa | гьинцIол*а | ‘на камне’ | ‘on a stone’ |
| hinu=lo | гьину=ло | ‘внутри, тоже’ | ‘inside, too’ |
| hinulogusːi | гьинулогусси | ’с внутренним‘ | ’with that from inside‘ |
| hoɢollˀo=lojd | гьогъолло=лойд | ‘на землю’ | ‘onto the ground, PTCL’ |
| horsatilˀa | гьорсатил*а | ‘сейчас’ | ‘at this time, now’ |
| huda=lojd | гьуда=лойд | ‘туда’ | ‘there, PTCL’ |
| huga=lo | гьуга=ло | ‘туда, тоже’ | ‘to there, too’ |
| iʟu=lojd | илIу=лойд | ‘внутрь’ | ‘inside, PTCL’ |
| iχʷalˀaʁojd | ихвал*агъойд | ‘в местности Ихвойл’ | ‘in Ikhvoyl (toponym)’ |
| iχolˀa | ихол*а | ‘на мельнице’ | ‘at a mill’ |
| ila | ила | ‘мать’ | ‘mother’ |
| ilajma | илайма | ‘родители’ | ‘parents’ |
| ilajmalɬbo=lo | илаймаллъбо=ло | ‘родители, тоже (аффектив)’ | ‘parents, too (affective)’ |
| iluʟ | илулъ | ‘матери (генитив)’ | ‘mother’s’ |
| innagulo | иннагуло | ‘постоянно’ | ‘constantly’ |
| išːalo | ищало | ‘домой’ | ‘to home’ |
| išulo | ишуло | ‘дома’ | ‘at home’ |
| iwalo | ивало | ‘куда-то’ | ‘to somewhere’ |
| jalˀir | йал*ир | ‘зовет (ее)’ | ‘is calling (her)’ |
| jiɢoloɢa=lo | йигъологъа=ло | ‘пока (она) придет, тоже’ | ‘until (she) comes, too’ |
| jiinnologu | йииннологу | ‘когда (она) уходит’ | ‘while (she) is leaving’ |
| jilˀinno | йил*инно | ‘(она) уходит’ | ‘(she) is leaving’ |
| k’ek’o=lo | КIекIо=ло | ‘Кеко (личное имя), тоже’ | ‘Keko (proper name)’ |
| k’otulˀa=jd | кIотул*а=йд | ‘на коне, мол’ | ‘on a horse, they say’ |
| k’otulˀa=lo | кIотул*а=ло | ‘на коне, тоже’ | ‘on a horse, too’ |
| kalas=lojd | калас=лойд | ‘класс’ | ‘class(mates), PTCL’ |
| klasilˀo | класил*о | ‘классу’ | ‘to the class(mates)’ |
| kodi=lo | коди=ло | ‘на руки, тоже’ | ‘into the hands, too’ |
| kulilɬku | кулиллъку | ‘из кошары’ | ‘from the sheepfold’ |
| kulillˀa | кулилл*а | ‘в кошаре’ | ‘in the sheepfold’ |
| kuli=lojd | кули=лойд | ‘кошара’ | ‘sheepfold, PTCL’ |
| kurt’alogu | куртIалогу | ‘с молотком’ | ‘with a hammer’ |
| kutakulˀa | кутакул*а | ‘сильно’ | ‘very much’ |
| kutukulˀa | кутукул*а | ‘очень сильно’ | ‘very-very much’ |
| lˀala | л*ала | ‘крышка’ | ‘lid’ |
| masala | масала | ‘пример’ | ‘example’ |
| matulˀaʁojd | матул*агъойд | ’в местности Матул*а’ | ‘in Matula (toponym)’ |
| matulˀo | матул*о | ’в местность Матул*а’ | ‘to Matula (toponym)’ |
| misalˀa | мисал*а | ‘на каком-то месте’ | ‘somewhere’ |
| misalˀakːu | мисал*акку | ‘из какого-то места’ | ‘from somewhere’ |
| mʲarulˀa | мярул*а | ‘в начале’ | ‘at the beginning’ |
| mʲarulˀo=lo | мярул*о=ло | ‘в начало, тоже’ | ‘to the starting point’ |
| musalaw | мусалав | ‘Мусалав (личное имя)’ | ‘Musalav (personal name)’ |
| musalawšːur | мусалавшур | ‘Мусалава (род.п., личное имя)’ | ‘Musalav’s (personal name)’ |
| nik’alajgu | никIалайгу | ‘в старину’ | ‘in the old times’ |
| oloqan | олохъан | ‘юноша’ | ‘young man’ |
| petizarʲadka=lojd | петизарядка=лойд | ‘пятизарядное ружье’ | ‘five-barrel gun, PTCL’ |
| položenija=lo | положенийа=ло | ‘положение, тоже’ | ‘situation, too’ |
| primerulˀaɬid | примерул*алъид | ‘на примере’ | ‘by the example of, PTCL’ |
| q’ali | къали | ‘канистра’ | ‘jerrycan’ |
| q’alidi | къалиди | ‘в канистру’ | ‘into a jerrycan’ |
| q’ali=lo | къали=ло | ‘канистра, тоже’ | ‘jerrycan, too’ |
| reɬolˀa=logu | релъол*а=логу | ‘находясь на озере’ | ‘while at the lake’ |
| rejdi=lojd | рейди=лойд | ‘на улицу’ | ‘outside, PTCL’ |
| relˀa | рел*а | ‘рука’ | ‘hand’ |
| rešinolˀakːu | решинол*акку | ‘с неба’ | ‘from the sky’ |
| rihisːula | ригьиссула | ‘под утро’ | ‘in the morning’ |
| rok’ollˀo=lojd | рокIолл*о=лойд | ‘в памяти (букв. в сердце)’ | ‘in the memory (lit. in the heart), PTCL’ |
| rolˀal | рол*ал | ‘одежда’ | ‘clothes’ |
| roq’orallo=logu | рокъоралло=логу | ‘примиряя’ | ‘while reconciling’ |
| rulˀond=lo | рул*онд=ло | ‘ушло, тоже’ | ‘(it) was gone, too’ |
| šːela | щела | ‘завтра’ | ‘tomorrow’ |
| sːori=lo | ссори=ло | ‘повернулся, тоже’ | ‘turned, too’ |
| žirado=lo=sːu=low | жирадо=ло=ссу=лов | ‘делает же, нет?’ | ‘does, doesn’t he?’ |
| sːuratulˀa | ссуратул*а | ‘на фотографии’ | ‘on a photo’ |
| sebgulo | себгуло | ‘ничего’ | ‘nothing’ |
| silalɬbo | силаллъбо | ‘для той силы’ | ‘to the force’ |
| soloman | Соломан | ‘Соломан (личное имя)’ | ‘Soloman (proper name)’ |
| soru=lo | сору=ло | ‘вместе, тоже’ | ‘together, too’ |
| t’ebt’elol=lo | тIебтIелол=ло | ‘кизяк, тоже’ | ‘dried dung, too’ |
| t’ulugu | тIулугу | ‘сильно’ | ‘strongly’ |
| talulˀa=lo | талул*а=ло | ‘на травянистом месте, тоже’ | ‘on a grassy place, too’ |
| tawsːu=lo | Тавссу=ло | ‘Тавссу (личное имя), тоже’ | ‘Tavssu (proper name), too’ |
| udob=lo=lˀa | удоб=ло=л*а | ‘то-се’ | ‘this and that’ |
| unsa=lo | унса=ло | ‘теплый, тоже’ | ‘warm, too’ |
| uškula | ушкула | ‘в школе’ | ‘at school’ |
| ust’ululˀa | устIулул*а | ‘на столе’ | ‘on a table’ |
| woχudu=lojd | вохуду=лойд | ‘приехал’ | ‘(he) came, PTCL’ |
| woinno=lo | воинно=ло | ‘ходил, тоже’ | ‘went, too’ |
| wok’o=lˀa | вокIо=л*а | ‘были же’ | ‘there were, weren’t there’ |
| wolˀinnu | вол*инну | ‘идти’ | ‘go’ |
| wolˀon | вол*он | ‘ушли’ | ‘(men) left’ |
| wolˀond | вол*онд | ‘ушли’ | ‘(men) have left’ |
| wolˀondil | вол*ондил | ‘ушли, оказывается’ | ‘apparently, (men) left’ |
| wolˀondil=lo | вол*ондил=ло | ‘ушли, оказывается, тоже’ | ‘apparently, (men) left, too’ |
| wolˀond=lo | вол*онд=ло | ‘ушли, тоже’ | ‘(men) left, too’ |
| woq’du=lo | вокъду=ло | ‘прийти, тоже’ | ‘arrive, too’ |
| worč’unni=lˀa | ворчIунни=л*а | ‘спаслись же’ | ‘(men) survived, didn’t they’ |
| wstrečallilˀo | встречаллил*о | ‘на встречи’ | ‘to meetings’ |
| wuč’orado=logu | вучIорадо=логу | ‘вставая’ | ‘when standing up’ |
| wuinno=logu | вуинно=логу | ‘уходя’ | ‘when leaving’ |
| wulˀom | вул*ом | ‘уходи’ | ‘leave!’ |
| wulˀon | вул*он | ‘ушел’ | ‘(he) left’ |
| wulˀond | вул*онд | ‘ушел’ | ‘(he) has left’ |
| wulˀond=id | вул*онд=ид | ‘что он пошел, мол’ | ‘(he) has left, they say’ |
| wulˀond=lo | вул*онд=ло | ‘уйдя, тоже’ | ‘having left, too’ |
| žibgu=lo | жибгу=ло | ‘и само, тоже’ | ‘itself, too’ |
| židu=lo | жиду=ло | ‘сделать, тоже’ | ‘do, too’ |
| žilˀid | жил*ид | ‘хочет’ | ‘wants’ |
| žirado=lo | жирадо=ло | ‘делается, тоже’ | ‘is being done, too’ |
| zolo | золо | ‘очень’ | ‘very’ |
| zologu | зологу | ‘слишком’ | ‘too much’ |
Fig. 21. Effect plot for the longest interval between glottal pulses in a lateral
Fig. 22. Effect plot for normalized intensity of a lateral
Fig. 23. Effect plot for duration of a lateral
Fig. 24. Effect plot for shimmer
Fig. 25. Effect plot for H2-H1 tilt (only speaker F45)
Fig. 26. Effect plot for A1-H1 tilt (only speaker F45)
Fig. 27. Effect plot for A2-H1 tilt (only speaker F45)
Table 2. Creak statistics
| speaker | prodType_norm | consonant | no creak | creaky | full stop | right creak spread | left creak spread |
|---|---|---|---|---|---|---|---|
| F30 | Individual words | l | 9 | NA | NA | NA | NA |
| F30 | Individual words | lˀ | 9 | NA | NA | NA | NA |
| F30 | Carrier phrase | l | 3 | NA | NA | NA | NA |
| F30 | Carrier phrase | lˀ | 3 | NA | NA | NA | NA |
| F45 | Individual words | l | 9 | NA | NA | NA | NA |
| F45 | Individual words | lˀ | NA | 9 | NA | 3 | NA |
| F45 | Carrier phrase | l | 3 | NA | NA | NA | NA |
| F45 | Carrier phrase | lˀ | 2 | 1 | NA | NA | NA |
| F45 | Free narrative | l | 29 | NA | NA | NA | NA |
| F45 | Free narrative | lˀ | 4 | 8 | 1 | 4 | NA |
| F49 | Individual words | l | 9 | NA | NA | NA | NA |
| F49 | Individual words | lˀ | NA | 8 | 1 | 7 | NA |
| F49 | Carrier phrase | l | 3 | NA | NA | NA | NA |
| F49 | Carrier phrase | lˀ | NA | 2 | 1 | 3 | NA |
| M35 | Free narrative | l | 19 | NA | NA | NA | NA |
| M35 | Free narrative | lˀ | 9 | 11 | 1 | NA | NA |
| M40 | Free narrative | l | 27 | NA | NA | NA | NA |
| M40 | Free narrative | lˀ | 17 | 4 | NA | NA | NA |
| M50 | Individual words | l | 9 | NA | NA | NA | NA |
| M50 | Individual words | lˀ | NA | 3 | 6 | NA | 1 |
| M50 | Carrier phrase | l | 3 | NA | NA | NA | NA |
| M50 | Carrier phrase | lˀ | NA | 3 | NA | NA | 1 |
| M52 | Individual words | l | 9 | NA | NA | NA | NA |
| M52 | Individual words | lˀ | 1 | 7 | 1 | 4 | NA |
| M52 | Carrier phrase | l | 3 | NA | NA | NA | NA |
| M52 | Carrier phrase | lˀ | 2 | NA | 1 | NA | NA |
| M60 | Individual words | l | 9 | NA | NA | NA | NA |
| M60 | Individual words | lˀ | NA | 9 | NA | 5 | NA |
| M60 | Carrier phrase | l | 3 | NA | NA | NA | NA |
| M60 | Carrier phrase | lˀ | NA | 3 | NA | 2 | NA |
| M69 | Individual words | l | 9 | NA | NA | NA | NA |
| M69 | Individual words | lˀ | NA | 2 | 7 | NA | NA |
| M69 | Carrier phrase | l | 3 | NA | NA | NA | NA |
| M69 | Carrier phrase | lˀ | NA | 1 | 2 | NA | NA |
| M69 | Free narrative | l | 28 | NA | NA | NA | NA |
| M69 | Free narrative | lˀ | 10 | 19 | NA | 1 | NA |
| M75 | Free narrative | l | 12 | NA | NA | NA | NA |
| M75 | Free narrative | lˀ | 9 | 9 | NA | 2 | NA |
Script for extracting sound data
# the script extracts data for each token of a lateral
form Data extracton parameters
# sound, word, production type (token), speaker - interval tiers
# pulse - point tier
comment Number of the sound tier
integer sndTier 1
comment Number of the word tier
integer wrdTier 2
comment Number of the production type tier
integer prodTypeTier 3
comment Number of the speaker tier
integer spkTier 6
comment Pulse tier
integer plsTier 7
comment Creak type tier
integer creakTier 8
comment Path to formant extraction data
text formantFile _ Formant_Extraction_Parameters.txt
comment Path to save spectrograms
text path C:\Users\ashir\Desktop\_l_Spectrograms\
endform
sound_data_raw = selected ("Sound")
textGrid_data = selected ("TextGrid")
Edit
# ---- delete the initial word "Sound " from the file name
select sound_data_raw
inpFile$ = selected$ ()
len = length: inpFile$
inpFile$ = right$: inpFile$, len - 6
# ---- make output file names
outFile$ = inpFile$ + "_Sound_data.txt"
# ---- resample the sound
select sound_data_raw
Resample... 16000 50
sound_data = selected("Sound")
# ---- scaling parameters
pctRightBase = 10 ; base width of a spectrogram in Praat picture
pctRightScale = 0.5 ; base duration of a word for scaling, seconds
pctRight = 0
# ---- variables
fCounter = 0 ; counter for formants
tokenCounter = 1 ; will be used as a key for the tokens
spectrogramFlag = 0
tmpSound = 0
select textGrid_data
nIntervals = Get number of intervals: sndTier ; number of intervals in the sounds tier
# ---- get formant extraction parameters
str = Read Strings from raw text file... 'formantFile$'
select str
strNum = Get number of strings
fParams$ [1] = "" ; array of formant extraction parameters
if strNum > 1
for i from 1 to strNum
fParams$ [i] = Get string: i
endfor
endif
removeObject: str
# ---- create intensity object
selectObject: sound_data
intensity = To Intensity... 100 0
# ---- make headers
writeFileLine: outFile$, "file", tab$, "token_code", tab$, "speaker", tab$, "word", tab$, "prodType", tab$, "v1", tab$, "v2", tab$, "consonant", tab$,
..."creakType", tab$, "creakStart", tab$, "creakEnd", tab$, "V1start", tab$, "Cstart", tab$, "V2start", tab$, "V2end", tab$,
..."v1_max_int", tab$, "c_min_int", tab$, "v2_max_int", tab$,
..."c_mean_int", tab$, "c_mean_int_norm", tab$,
..."left_point", tab$, "f0_left_hz", tab$, "f0_left_db", tab$, "h2_left_hz", tab$, "h2_left_db", tab$, "a1_left_hz", tab$, "a1_left_db", tab$, "a2_left_hz", tab$, "a2_left_db", tab$,
..."mid_point", tab$, "f0_mid_hz", tab$, "f0_mid_db", tab$, "h2_mid_hz", tab$, "h2_mid_db", tab$, "a1_mid_hz", tab$, "a1_mid_db", tab$, "a2_mid_hz", tab$, "a2_mid_db", tab$,
..."right_point", tab$, "f0_right_hz", tab$, "f0_right_db", tab$, "h2_right_hz", tab$, "h2_right_db", tab$, "a1_right_hz", tab$, "a1_right_db", tab$, "a2_right_hz", tab$, "a2_right_db"
# ---- the main algorythm
writeInfo: ""
for i from 2 to (nIntervals - 1)
# -- find sounds in the sound tier
selectObject: textGrid_data
snd1$ = Get label of interval: sndTier, i - 1 ; previous sound
snd2$ = Get label of interval: sndTier, i ; current sound
snd3$ = Get label of interval: sndTier, i + 1 ; next sound
# limits of the previous sound
snd1Lft = Get start point: sndTier, i - 1 ; the left point of the interval
snd1Rght = Get end point: sndTier, i - 1 ; the right point of the interval
# limits of the current sound
snd2Lft = Get start point: sndTier, i
snd2Rght = Get end point: sndTier, i
# limits of the next sound
snd3Lft = Get start point: sndTier, i + 1
snd3Rght = Get end point: sndTier, i + 1
# -- check that the sounds are in the same word
wrdLft = Get interval at time: wrdTier, (snd1Lft + snd2Lft) / 2
wrdLft$ = Get label of interval: wrdTier, wrdLft
wrdRght = Get interval at time: wrdTier, (snd3Lft + snd3Rght) / 2
wrdRght$ = Get label of interval: wrdTier, wrdRght
# save the spectrogram
if spectrogramFlag = 1 and wrdRght$ <> wrdLft$
Select outer viewport: 0, pctRight, 0, 7
fname$ = path$ + inpFile$ + "_" + string$(tokenCounter) + "_" + wrdLft$ + "_" + spk$ + "_" + prodType$ + ".png"
Save as 300-dpi PNG file: fname$
removeObject: tmpTxtGrid
removeObject: tmpSound
spectrogramFlag = 0
tmpSound = 0
endif
# -- normalize sound notation
if snd2$ = "l'"
snd2$ = "lˀ"
endif
# -- check whether the lateral is between 2 sounds and that they all are within one word
# -- then extract all the necessary data
if (snd2$ = "l" or snd2$ = "lˀ") and snd1$ <> "" and snd3$ <> "" and wrdLft$ = wrdRght$ and
...((length (snd1$) = 1 and length (snd3$) = 1) or
...(left$(snd3$,1) = "^" and length (snd1$) = 1) or
...(left$(snd1$,1) = "^" and length (snd3$) = 1))
spectrogramFlag = 1
wrdBorderLft = Get start point: wrdTier, wrdLft
wrdBorderRght = Get end point: wrdTier, wrdLft
# -- drafting the spectrogram
# extract the sound and textgrid
if tmpSound = 0 ; this is the first encounter of V_V
select sound_data
Extract part: wrdBorderLft, wrdBorderRght, "rectangular", 1, "no"
tmpSound = selected("Sound")
select textGrid_data
Extract part: wrdBorderLft, wrdBorderRght, "no"
tmpTxtGrid = selected ("TextGrid")
nPulses = Get number of points: plsTier
z = 1
while z <= nPulses
t = Get time of point: plsTier, z
if (t < snd1Lft - wrdBorderLft) or (t > snd3Rght - wrdBorderRght)
Remove point: plsTier, z
nPulses = Get number of points: plsTier
else
z = z + 1
endif
endwhile
# remove the data that is not required
numberOfTiers = Get number of tiers
if numberOfTiers = 9
Remove tier... 9
Remove tier... 8
endif
Remove tier... 5
Remove tier... 4
# scaling
pctRight = pctRightBase * (wrdBorderRght - wrdBorderLft) / pctRightScale
# draw the spectrogram
select tmpSound
plus tmpTxtGrid
Edit
Select outer viewport: 0, pctRight, 4, 7
editor: tmpTxtGrid
Select: 0, wrdBorderRght - wrdBorderLft
Draw visible sound and TextGrid: "yes", "no", "yes", "yes", "yes"
endeditor
Select outer viewport: 0, pctRight, 0, 4
editor: tmpTxtGrid
Select: 0, wrdBorderRght - wrdBorderLft
# parameters: erase first, write name, draw selection times
# draw selection hairs, garnish
Paint visible spectrogram: "no", "no", "yes", "yes", "yes"
endeditor
endif
# -- data extraction
selectObject: textGrid_data
prodType = Get interval at time: prodTypeTier, snd2Lft
prodType$ = Get label of interval: prodTypeTier, prodType
spk = Get interval at time: spkTier, snd2Lft
spk$ = Get label of interval: spkTier, spk
creakType_number = Get number of intervals: creakTier
creakType = Get interval at time: creakTier, snd1Lft
if creakType_number > 2 and creakType < creakType_number - 1
creakType = creakType + 1 ; because we know there cannot be creak in the beginning of the first vowel
creakStart = Get start point: creakTier, creakType
creakEnd = Get end point: creakTier, creakType
creakType$ = Get label of interval: creakTier, creakType
if creakStart > snd3Rght or creakType$ = ""
creakStart = 0
creakEnd = 0
creakType$ = "-"
endif
else
# there's only one or two intervals in the tier
creakStart = 0
creakEnd = 0
creakType$ = "-"
endif
appendFile: outFile$, inpFile$, tab$, tokenCounter, tab$, spk$, tab$, wrdLft$, tab$, prodType$, tab$, snd1$, tab$, snd3$, tab$, snd2$, tab$,
...creakType$, tab$, fixed$ (creakStart, 3), tab$, fixed$ (creakEnd, 3), tab$, fixed$ (snd1Lft, 3), tab$, fixed$ (snd2Lft, 3), tab$, fixed$ (snd3Lft, 3), tab$, fixed$ (snd3Rght,3), tab$
selectObject: intensity
snd1IntMax = Get maximum: snd1Lft, snd2Lft, "None"
snd2IntMean = Get mean... snd2Lft snd3Lft dB
snd2IntMin = Get minimum... snd2Lft snd3Lft None
snd3IntMax = Get mean... snd3Lft snd3Rght dB
# -- extract normalized intensity of the consonants
snd2IntNorm = 0
@extract_normalized_intensities: sound_data, snd2Lft, snd2Rght, snd3Rght, 70, snd2IntNorm
appendFile: outFile$, fixed$ (snd1IntMax, 2), tab$, fixed$ (snd2IntMin, 2), tab$, fixed$ (snd3IntMax, 2), tab$,
...fixed$ (snd2IntMean, 2), tab$, fixed$ (snd2IntNorm, 2), tab$
# -- extract formant data
if fCounter = 0
fCounter = 1
@split (" ", fParams$ [fCounter])
while split.array$[1] <> inpFile$
fCounter = fCounter + 1
@split (" ", fParams$ [fCounter])
endwhile
#appendInfoLine: fCounter, tab$, wrdLft$
else
fCounter = fCounter + 1
@split (" ", fParams$ [fCounter])
appendInfoLine: fCounter, tab$, wrdLft$
endif
# estimate formant intensities, draw formants
for k from 1 to 3
tiltPlace$ = split.array$[(k-1)*7+2]
a1_lft_hz$ = split.array$[(k-1)*7+3]
a1_rght_hz = number (split.array$[(k-1)*7+4])
a2_lft_hz = number (split.array$[(k-1)*7+5])
a2_rght_hz = number (split.array$[(k-1)*7+6])
a3_lft_hz = number (split.array$[(k-1)*7+7])
a3_rght_hz = number (split.array$[(k-1)*7+8])
if tiltPlace$ <> "-" and a1_lft_hz$ <> "-"
tiltTime = snd2Lft + (snd2Rght - snd2Lft) * number(tiltPlace$)
f0_hz = 0
@estimate_f0_hz: sound_data, textGrid_data, plsTier, tiltTime, f0_hz
h2_hz = f0_hz * 2
a1_hz = 0
a2_hz = 0
f0_dB = 0
h2_dB = 0
a1_dB = 0
a2_dB = 0
if a1_lft_hz$ = "Auto"
@extract_formants_no_bands: sound_data, tiltTime, f0_hz
f0_hz = extract_formants_no_bands.f0_hz
h2_hz = extract_formants_no_bands.h2_hz
a1_hz = extract_formants_no_bands.a1_hz
a2_hz = extract_formants_no_bands.a2_hz
f0_dB = extract_formants_no_bands.f0_dB
h2_dB = extract_formants_no_bands.h2_dB
a1_dB = extract_formants_no_bands.a1_dB
a2_dB = extract_formants_no_bands.a2_dB
else
@extract_formants_with_bands: sound_data, tiltTime, number(a1_lft_hz$), a1_rght_hz, a2_lft_hz, a2_rght_hz, f0_hz
f0_hz = extract_formants_with_bands.f0_hz
h2_hz = extract_formants_with_bands.h2_hz
a1_hz = extract_formants_with_bands.a1_hz
a2_hz = extract_formants_with_bands.a2_hz
f0_dB = extract_formants_with_bands.f0_dB
h2_dB = extract_formants_with_bands.h2_dB
a1_dB = extract_formants_with_bands.a1_dB
a2_dB = extract_formants_with_bands.a2_dB
endif
@draw_formants: f0_hz, h2_hz, a1_hz, a2_hz, (tiltTime - wrdBorderLft)
appendFile: outFile$, tiltPlace$, tab$, fixed$ (f0_hz, 2), tab$, fixed$ (f0_dB, 2), tab$, fixed$ (h2_hz, 2), tab$, fixed$ (h2_dB, 2), tab$, fixed$ (a1_hz, 2), tab$, fixed$ (a1_dB, 2), tab$, fixed$ (a2_hz, 2), tab$, fixed$ (a2_dB, 2)
else
appendFile: outFile$, "-", tab$, "-", tab$, "-", tab$, "-", tab$, "-", tab$, "-", tab$, "-", tab$, "-", tab$, "-"
endif
if k < 3
appendFile: outFile$, tab$
endif
endfor
appendFileLine: outFile$
tokenCounter = tokenCounter + 1
endif
endfor
if spectrogramFlag = 1 and wrdRght$ <> wrdLft$
Select outer viewport: 0, pctRight, 0, 7
fname$ = inpFile$ + "_" + string$(tokenCounter) + "_" + wrdLft + "_" + spk$ + "_" + prodType$ + ".png"
Save as 300-dpi PNG file: fname$
spectrogramFlag = 0
# removeObject: tmpTxtGrid
# removeObject: tmpSound
endif
removeObject: intensity
removeObject: sound_data
selectObject: sound_data_raw, textGrid_data
appendInfoLine: "Done!"
# .sep$ - separator, .str$ the string to be separated
procedure split (.sep$, .str$)
.strlen = length (.str$)
.sep = index (.str$, .sep$)
.seplen = length (.sep$)
.length = 1
while .sep > 0
.part$ = left$ (.str$, .sep - 1)
.str$ = right$ (.str$, length (.str$) - .sep - .seplen + 1)
.sep = index (.str$, .sep$)
.array$ [.length] = .part$
.length = .length + 1
endwhile
.array$ [.length] = .str$
endproc
procedure extract_normalized_intensities: .sound_data, .snd2Lft, .snd2Rght, .snd3Rght, .norm_dB, snd2IntNorm
select .sound_data
Extract part: .snd2Lft - 1, .snd3Rght + 1, "rectangular", 1, "yes"
.tmpSound = selected ("Sound")
.tmpIntensity = To Intensity... 100 0
.snd3Int = Get mean... .snd2Rght .snd3Rght dB
.snd2Int = Get mean... .snd2Lft .snd2Rght dB
.snd2snd3Int = Get mean... .snd2Lft .snd3Rght dB
removeObject: .tmpIntensity
.snd3IntNorm = .norm_dB
snd2IntNorm = .snd2Int + (.snd3IntNorm - .snd3Int)
.snd2snd3IntNorm = .snd2snd3Int + (.snd3IntNorm - .snd3Int)
.loopFlag = 1
while .loopFlag = 1
selectObject: .tmpSound
Scale intensity... .snd2snd3IntNorm
.tmpIntensity = To Intensity... 100 0
snd2IntNorm = Get mean... .snd2Lft .snd2Rght dB
.snd3IntNorm = Get mean... .snd2Rght .snd3Rght dB
if .snd3IntNorm < 69.5
.snd2snd3IntNorm = .snd2snd3IntNorm + 1
endif
if .snd3IntNorm > 70.5
.snd2snd3IntNorm = .snd2snd3IntNorm - 1
endif
if .snd3IntNorm >= 69.5 and .snd3IntNorm <= 70.5
.loopFlag = 0
endif
removeObject: .tmpIntensity
endwhile
removeObject: .tmpSound
endproc
procedure estimate_f0_hz: .sound_data, .textGrid_data, .pulseTier, .tiltPlace, f0_hz
# if pulse interval is greater than 0.02, f0 is undefined
select .textGrid_data
.pulse_start_id = 1
.pulseTime = Get time of point: .pulseTier, .pulse_start_id
while .pulseTime < .tiltPlace
.pulse_start_id = .pulse_start_id + 1
.pulseTime = Get time of point: .pulseTier, .pulse_start_id
endwhile
.pulseTime_prev = Get time of point: .pulseTier, (.pulse_start_id - 1)
if (.pulseTime - .pulseTime_prev) > 0.02
f0_hz = undefined
else
f0_hz = 1 / (.pulseTime - .pulseTime_prev)
endif
endproc
procedure extract_formants_with_bands: .sound_data, .tiltTime, .a1_left_hz, .a1_right_hz, .a2_left_hz, .a2_right_hz, .f0_hz
select .sound_data
Edit
editor: .sound_data
Move cursor to: .tiltTime
View spectral slice
Close
.sliceID = selected ("Spectrum")
.ltasID = To Ltas (1-to-1)
if .f0_hz <> undefined
.f0_dB = Get maximum: (.f0_hz * 0.9), (.f0_hz * 1.1), "None"
.f0_hz = Get frequency of maximum: (.f0_hz * 0.9), (.f0_hz * 1.1), "None"
.h2_hz = f0_hz * 2
.h2_dB = Get maximum: (.h2_hz * 0.9), (.h2_hz * 1.1), "None"
else
.f0_dB = undefined
.h2_hz = undefined
.h2_dB = undefined
endif
.a1_dB = Get maximum: .a1_left_hz, .a1_right_hz, "None"
.a1_hz = Get frequency of maximum: .a1_left_hz, .a1_right_hz, "None"
.a2_dB = Get maximum: .a2_left_hz, .a2_right_hz, "None"
.a2_hz = Get frequency of maximum: .a2_left_hz, .a2_right_hz, "None"
removeObject: .sliceID
removeObject: .ltasID
endproc
procedure extract_formants_no_bands: .sound_data, .tiltTime, .f0_hz
select .sound_data
Edit
editor: .sound_data
Move cursor to: .tiltTime
View spectral slice
Close
.sliceID = selected ("Spectrum")
.ltasID = To Ltas (1-to-1)
select .sound_data
Edit
editor: .sound_data
Select: (.tiltTime - 0.1), (.tiltTime + 0.1)
Extract selected sound (preserve times)
Close
.tmpSoundID = selected ("Sound")
.formantID = To Formant (burg)... 0.0025 5 5900 0.025 50
.a1_hz = Get quantile: 1, (.tiltTime - 0.05), (.tiltTime + 0.05), "Hertz", 0.5
.a2_hz = Get quantile: 2, (.tiltTime - 0.05), (.tiltTime + 0.05), "Hertz", 0.5
select .ltasID
if .f0_hz = undefined
.f0_dB = undefined
.h2_hz = undefined
.h2_dB = undefined
else
.f0_dB = Get maximum: (.f0_hz * 0.9), (.f0_hz * 1.1), "None"
.f0_hz = Get frequency of maximum: (.f0_hz * 0.9), (.f0_hz * 1.1), "None"
.h2_hz = .f0_hz * 2
.h2_dB = Get maximum: (.h2_hz * 0.9), (.h2_hz * 1.1), "None"
endif
if .a1_hz = undefined
.a1_dB = undefined
else
.a1_dB = Get maximum: (.a1_hz * 0.9), (.a1_hz * 1.1), "None"
.a1_hz = Get frequency of maximum: (.a1_hz * 0.9), (.a1_hz * 1.1), "None"
endif
if .a2_hz = undefined
.a2_dB = undefined
else
.a2_dB = Get maximum: (.a2_hz * 0.9), (.a2_hz * 1.1), "None"
.a2_hz = Get frequency of maximum: (.a2_hz * 0.9), (.a2_hz * 1.1), "None"
endif
removeObject: .tmpSoundID
removeObject: .sliceID
removeObject: .ltasID
removeObject: .formantID
endproc
procedure draw_formants: .f0_hz, .h2_hz, .a1_hz, .a2_hz, .place
if .a1_hz <> undefined
One mark left: .a1_hz, "yes", "yes", "yes", ""
Paint circle: "red", .place, .a1_hz, 0.002
endif
if .a2_hz <> undefined
One mark left: .a2_hz, "yes", "yes", "yes", ""
Paint circle: "red", .place, .a2_hz, 0.002
endif
endproc